package com.csii.branch.service.impl;

import com.csii.branch.service.dto.CdBranchBaseInfoDTO;
import com.csii.branch.mapper.entity.CdBranchLicenseInfo;
import com.csii.branch.mapper.entity.CdBranchBaseInfo;
import com.csii.branch.service.dto.CdBranchLicenseInfoDTO;
import com.csii.branch.mapper.entity.CdBranchPlaceInfo;
import com.csii.branch.mapper.entity.CdBranchBaseInfo;
import com.csii.branch.service.dto.CdBranchPlaceInfoDTO;
import com.csii.branch.mapper.entity.CdBranchDeviceInfo;
import com.csii.branch.mapper.entity.CdBranchBaseInfo;
import com.csii.branch.service.dto.CdBranchDeviceInfoDTO;
import com.csii.branch.mapper.entity.CdBranchSupervisorInfo;
import com.csii.branch.mapper.entity.CdBranchBaseInfo;
import com.csii.branch.service.dto.CdBranchSupervisorInfoDTO;
import com.csii.branch.mapper.entity.CdBranchAroundInfo;
import com.csii.branch.mapper.entity.CdBranchBaseInfo;
import com.csii.branch.service.dto.CdBranchAroundInfoDTO;
import com.csii.branch.mapper.CdBranchLicenseInfoMapper;
import com.csii.branch.mapper.CdBranchPlaceInfoMapper;
import com.csii.branch.mapper.CdBranchDeviceInfoMapper;
import com.csii.branch.mapper.CdBranchSupervisorInfoMapper;
import com.csii.branch.mapper.CdBranchAroundInfoMapper;
import com.csii.branch.mapper.CdBranchBaseInfoMapper;
import com.csii.branch.service.ICdBranchBaseInfoService;
import com.csii.core.exception.AppException;
import com.csii.core.util.ConvertUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
import java.util.Collection;

/**
 * @Description: 网点基本信息
 * @Author: power-stdio
 * @Date:   2020-12-22
 * @Version: V1.0
 */
@Service
public class CdBranchBaseInfoServiceImpl extends ServiceImpl<CdBranchBaseInfoMapper, CdBranchBaseInfo> implements ICdBranchBaseInfoService {

	@Autowired
	private CdBranchBaseInfoMapper cdBranchBaseInfoMapper;
	@Autowired
	private CdBranchLicenseInfoMapper cdBranchLicenseInfoMapper;
	@Autowired
	private CdBranchPlaceInfoMapper cdBranchPlaceInfoMapper;
	@Autowired
	private CdBranchDeviceInfoMapper cdBranchDeviceInfoMapper;
	@Autowired
	private CdBranchSupervisorInfoMapper cdBranchSupervisorInfoMapper;
	@Autowired
	private CdBranchAroundInfoMapper cdBranchAroundInfoMapper;

	@Override
	@Transactional
	public void saveMain(CdBranchBaseInfoDTO cdBranchBaseInfoDTO, List<CdBranchLicenseInfoDTO> cdBranchLicenseInfoDTOList,List<CdBranchPlaceInfoDTO> cdBranchPlaceInfoDTOList,List<CdBranchDeviceInfoDTO> cdBranchDeviceInfoDTOList,List<CdBranchSupervisorInfoDTO> cdBranchSupervisorInfoDTOList,List<CdBranchAroundInfoDTO> cdBranchAroundInfoDTOList) {
		CdBranchBaseInfo cdBranchBaseInfo = ConvertUtils.convert(CdBranchBaseInfo.class,cdBranchBaseInfoDTO);
		if(StringUtils.isEmpty(cdBranchBaseInfo.getPid()))
			cdBranchBaseInfo.setPid(ROOT_PID_VALUE);
		cdBranchBaseInfoMapper.insert(cdBranchBaseInfo);
		if(cdBranchLicenseInfoDTOList!=null && cdBranchLicenseInfoDTOList.size()>0) {
		    List<CdBranchLicenseInfo> cdBranchLicenseInfoList = ConvertUtils.convertList(CdBranchLicenseInfo.class, cdBranchLicenseInfoDTOList);
			for(CdBranchLicenseInfo entity:cdBranchLicenseInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchLicenseInfoMapper.insert(entity);
			}
		}
		if(cdBranchPlaceInfoDTOList!=null && cdBranchPlaceInfoDTOList.size()>0) {
		    List<CdBranchPlaceInfo> cdBranchPlaceInfoList = ConvertUtils.convertList(CdBranchPlaceInfo.class, cdBranchPlaceInfoDTOList);
			for(CdBranchPlaceInfo entity:cdBranchPlaceInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchPlaceInfoMapper.insert(entity);
			}
		}
		if(cdBranchDeviceInfoDTOList!=null && cdBranchDeviceInfoDTOList.size()>0) {
		    List<CdBranchDeviceInfo> cdBranchDeviceInfoList = ConvertUtils.convertList(CdBranchDeviceInfo.class, cdBranchDeviceInfoDTOList);
			for(CdBranchDeviceInfo entity:cdBranchDeviceInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchDeviceInfoMapper.insert(entity);
			}
		}
		if(cdBranchSupervisorInfoDTOList!=null && cdBranchSupervisorInfoDTOList.size()>0) {
		    List<CdBranchSupervisorInfo> cdBranchSupervisorInfoList = ConvertUtils.convertList(CdBranchSupervisorInfo.class, cdBranchSupervisorInfoDTOList);
			for(CdBranchSupervisorInfo entity:cdBranchSupervisorInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchSupervisorInfoMapper.insert(entity);
			}
		}
		if(cdBranchAroundInfoDTOList!=null && cdBranchAroundInfoDTOList.size()>0) {
		    List<CdBranchAroundInfo> cdBranchAroundInfoList = ConvertUtils.convertList(CdBranchAroundInfo.class, cdBranchAroundInfoDTOList);
			for(CdBranchAroundInfo entity:cdBranchAroundInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchAroundInfoMapper.insert(entity);
			}
		}
		if(!cdBranchBaseInfo.getPid().equals(ROOT_PID_VALUE))
		{
			cdBranchBaseInfoMapper.updateHasChild(cdBranchBaseInfo.getPid(),HASCHILD);
		}
	}

	@Override
	@Transactional
	public void updateMain(CdBranchBaseInfoDTO cdBranchBaseInfoDTO,List<CdBranchLicenseInfoDTO> cdBranchLicenseInfoDTOList,List<CdBranchPlaceInfoDTO> cdBranchPlaceInfoDTOList,List<CdBranchDeviceInfoDTO> cdBranchDeviceInfoDTOList,List<CdBranchSupervisorInfoDTO> cdBranchSupervisorInfoDTOList,List<CdBranchAroundInfoDTO> cdBranchAroundInfoDTOList) {
		CdBranchBaseInfo cdBranchBaseInfo = ConvertUtils.convert(CdBranchBaseInfo.class,cdBranchBaseInfoDTO);
		cdBranchBaseInfoMapper.updateById(cdBranchBaseInfo);
		
		//1.先删除子表数据
		cdBranchLicenseInfoMapper.deleteByMainId(cdBranchBaseInfo.getId());
		cdBranchPlaceInfoMapper.deleteByMainId(cdBranchBaseInfo.getId());
		cdBranchDeviceInfoMapper.deleteByMainId(cdBranchBaseInfo.getId());
		cdBranchSupervisorInfoMapper.deleteByMainId(cdBranchBaseInfo.getId());
		cdBranchAroundInfoMapper.deleteByMainId(cdBranchBaseInfo.getId());
		
		//2.子表数据重新插入
		if(cdBranchLicenseInfoDTOList!=null && cdBranchLicenseInfoDTOList.size()>0) {
		    List<CdBranchLicenseInfo> cdBranchLicenseInfoList = ConvertUtils.convertList(CdBranchLicenseInfo.class, cdBranchLicenseInfoDTOList);
			for(CdBranchLicenseInfo entity:cdBranchLicenseInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchLicenseInfoMapper.insert(entity);
			}
		}
		if(cdBranchPlaceInfoDTOList!=null && cdBranchPlaceInfoDTOList.size()>0) {
		    List<CdBranchPlaceInfo> cdBranchPlaceInfoList = ConvertUtils.convertList(CdBranchPlaceInfo.class, cdBranchPlaceInfoDTOList);
			for(CdBranchPlaceInfo entity:cdBranchPlaceInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchPlaceInfoMapper.insert(entity);
			}
		}
		if(cdBranchDeviceInfoDTOList!=null && cdBranchDeviceInfoDTOList.size()>0) {
		    List<CdBranchDeviceInfo> cdBranchDeviceInfoList = ConvertUtils.convertList(CdBranchDeviceInfo.class, cdBranchDeviceInfoDTOList);
			for(CdBranchDeviceInfo entity:cdBranchDeviceInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchDeviceInfoMapper.insert(entity);
			}
		}
		if(cdBranchSupervisorInfoDTOList!=null && cdBranchSupervisorInfoDTOList.size()>0) {
		    List<CdBranchSupervisorInfo> cdBranchSupervisorInfoList = ConvertUtils.convertList(CdBranchSupervisorInfo.class, cdBranchSupervisorInfoDTOList);
			for(CdBranchSupervisorInfo entity:cdBranchSupervisorInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchSupervisorInfoMapper.insert(entity);
			}
		}
		if(cdBranchAroundInfoDTOList!=null && cdBranchAroundInfoDTOList.size()>0) {
		    List<CdBranchAroundInfo> cdBranchAroundInfoList = ConvertUtils.convertList(CdBranchAroundInfo.class, cdBranchAroundInfoDTOList);
			for(CdBranchAroundInfo entity:cdBranchAroundInfoList) {
				//外键设置
				entity.setNetId(cdBranchBaseInfo.getId());
				cdBranchAroundInfoMapper.insert(entity);
			}
		}
	}

	@Override
	@Transactional
	public void delMain(String id) {
		CdBranchBaseInfo cdBranchBaseInfo =cdBranchBaseInfoMapper.selectById(id);
		cdBranchLicenseInfoMapper.deleteByMainId(id);
		cdBranchPlaceInfoMapper.deleteByMainId(id);
		cdBranchDeviceInfoMapper.deleteByMainId(id);
		cdBranchSupervisorInfoMapper.deleteByMainId(id);
		cdBranchAroundInfoMapper.deleteByMainId(id);
		cdBranchBaseInfoMapper.deleteById(id);
		cdBranchBaseInfoMapper.updateHasChild(cdBranchBaseInfo.getPid(), cdBranchBaseInfoMapper.countChild(cdBranchBaseInfo.getId())==0?NOCHILD:HASCHILD);
	}

	@Override
	@Transactional
	public void delBatchMain(Collection<? extends Serializable> idList) {
		for(Serializable id:idList) {
			delMain((String)id);
		}
	}
	
}
